{$CLEO .cs}
{$USE CLEO+}

SCRIPT_NAME 'GW_AGTT'

IF IS_ON_SAMP
THEN TERMINATE_THIS_CUSTOM_SCRIPT
END

WHILE NOT IS_PLAYER_PLAYING 0
    WAIT 0
END
WAIT 1000

//***********************************************************************************//
///////////////////////////////////////////////////////////////////////////////////////
// Allied Gang Turf Transfer
// Author: AlvarynGTA
///////////////////////////////////////////////////////////////////////////////////////
INT isEnabled, transferMode, selectionTime, promptDelay
INT triadButton, aztecaButton

INT isGangWarActive, warState, currentGangEnemy
INT selectedOwner, selectionAborted
INT countFamilies, countTriads, countAztecas
INT ped, pedType, slot
INT density, enemyDensity, isCompletedGangWar
INT zonePtr, zoneLabelPtr, tmp
STRING warZoneKey = ''

CONST
    GANG_GROVE = 1
    GANG_TRIADS = 6
    GANG_AZTECAS = 7

    PEDTYPE_GROVE = 8
    PEDTYPE_TRIADS = 13
    PEDTYPE_AZTECAS = 14

    DEFAULT_TRANSFER_MODE = 0
    DEFAULT_SELECTION_TIME = 5000
    DEFAULT_PROMPT_DELAY = 2000

    MAX_SELECTION_TIME = 30000
    MAX_PROMPT_DELAY = 10000

    DEFAULT_TRIAD_BUTTON = 11
    DEFAULT_AZTECAS_BUTTON = 10

    MIN_BUTTON_ID = 0
    MAX_BUTTON_ID = 19

    FXT_AZTECA = 'AGTT_AZ'
    FXT_TRIAD = 'AGTT_TR'
    FXT_BOTH = 'AGTT_BT'

    FXT_OWN_GROVE = 'AGTT_OG'
    FXT_OWN_TRIAD = 'AGTT_OT'
    FXT_OWN_AZTECA = 'AGTT_OA'
END
//***********************************************************************************//

GOSUB @read_INI

//-----------------------------------------------------------------------------//
:MAIN_LOOP
//-----------------------------------------------------------------------------//
WAIT 100

IF IS_GANG_WAR_GOING_ON
THEN
    warState = READ_MEMORY 0x96AB64 1 0

    IF AND
        warState > 0
        isGangWarActive == 0
    THEN
        currentGangEnemy = READ_MEMORY 0x96AB84 4 0
        GOSUB @on_gangwar_start
    END
ELSE
    IF isGangWarActive == 1
    THEN
        GOSUB @on_gangwar_end
        GOSUB @reset_runtime
    END
END

GOTO @MAIN_LOOP

//_______________________________________________________________
:on_gangwar_start
//_______________________________________________________________
isGangWarActive = 1
selectedOwner = GANG_GROVE
selectionAborted = 0

GOSUB @scan_player_group

IF AND
    countTriads == 0
    countAztecas == 0
THEN RETURN
END

IF transferMode == 1
THEN
    GOSUB @select_auto_owner
    RETURN
END

WAIT promptDelay

IF NOT IS_GANG_WAR_GOING_ON
THEN RETURN
END

warState = READ_MEMORY 0x96AB64 1 0
IF warState <= 0
THEN RETURN
END

GOSUB @show_prompt
GOSUB @read_manual_selection

IF AND
    selectionAborted == 0
    IS_GANG_WAR_GOING_ON
THEN GOSUB @show_owner_confirmation
END

RETURN

//_______________________________________________________________
:on_gangwar_end
//_______________________________________________________________
GOSUB @get_gangwar_zone
GOSUB @is_completed_gangwar

IF isCompletedGangWar == 1
THEN GOSUB @apply_selected_owner
END

RETURN

//_______________________________________________________________
:scan_player_group
//_______________________________________________________________
countFamilies = 0
countTriads = 0
countAztecas = 0

FOR slot = 0 TO 6
    ped = GET_GROUP_MEMBER $PLAYERS_GROUP slot

    IF AND
        ped <> -1
        DOES_CHAR_EXIST ped
        NOT IS_CHAR_DEAD ped
    THEN
        pedType = GET_PED_TYPE ped

        IF pedType == PEDTYPE_GROVE
        THEN countFamilies++
        END

        IF AND
            pedType == PEDTYPE_TRIADS
            currentGangEnemy <> GANG_TRIADS
        THEN countTriads++
        END

        IF AND
            pedType == PEDTYPE_AZTECAS
            currentGangEnemy <> GANG_AZTECAS
        THEN countAztecas++
        END
    END
END

RETURN

//_______________________________________________________________
:show_prompt
//_______________________________________________________________
IF AND
    countTriads > 0
    countAztecas > 0
THEN
    PRINT_HELP FXT_BOTH
    RETURN
END

IF countTriads > 0
THEN
    PRINT_HELP FXT_TRIAD
    RETURN
END

PRINT_HELP FXT_AZTECA

RETURN

//_______________________________________________________________
:read_manual_selection
//_______________________________________________________________
TIMERA = 0

WHILE TRUE
    WAIT 0

    IF TIMERA >= selectionTime
    THEN
        CLEAR_HELP
        BREAK
    END

    IF NOT IS_GANG_WAR_GOING_ON
    THEN
        CLEAR_HELP
        selectionAborted = 1
        RETURN
    END

    warState = READ_MEMORY 0x96AB64 1 0
    IF warState <= 0
    THEN
        CLEAR_HELP
        selectionAborted = 1
        RETURN
    END

    IF countTriads > 0
    THEN
        IF OR
            IS_BUTTON_PRESSED 0 triadButton
            IS_BUTTON_PRESSED 1 triadButton
        THEN
            selectedOwner = GANG_TRIADS
            CLEAR_HELP
            BREAK
        END
    END

    IF countAztecas > 0
    THEN
        IF OR
            IS_BUTTON_PRESSED 0 aztecaButton
            IS_BUTTON_PRESSED 1 aztecaButton
        THEN
            selectedOwner = GANG_AZTECAS
            CLEAR_HELP
            BREAK
        END
    END
END

RETURN

//_______________________________________________________________
:show_owner_confirmation
//_______________________________________________________________
IF selectedOwner == GANG_TRIADS
THEN
    PRINT_HELP FXT_OWN_TRIAD
    RETURN
END

IF selectedOwner == GANG_AZTECAS
THEN
    PRINT_HELP FXT_OWN_AZTECA
    RETURN
END

PRINT_HELP FXT_OWN_GROVE

RETURN

//_______________________________________________________________
:select_auto_owner
//_______________________________________________________________
selectedOwner = GANG_GROVE

IF AND
    countTriads > countFamilies
    countTriads > countAztecas
THEN selectedOwner = GANG_TRIADS
END

IF AND
    countAztecas > countFamilies
    countAztecas > countTriads
THEN selectedOwner = GANG_AZTECAS
END

RETURN

//_______________________________________________________________
:get_gangwar_zone
//_______________________________________________________________
warZoneKey = ''

zonePtr = READ_MEMORY 0x96AB88 4 0

IF zonePtr <> 0
THEN
    zoneLabelPtr = zonePtr
    tmp, warZoneKey = SCAN_STRING zoneLabelPtr "%s"
END

RETURN

//_______________________________________________________________
:is_completed_gangwar
//_______________________________________________________________
isCompletedGangWar = 0

IF warZoneKey == ''
THEN RETURN
END

IF currentGangEnemy < 0
THEN RETURN
END

enemyDensity = GET_ZONE_GANG_STRENGTH warZoneKey currentGangEnemy
density = GET_ZONE_GANG_STRENGTH warZoneKey GANG_GROVE

IF AND
    enemyDensity == 0
    density > 0
THEN isCompletedGangWar = 1
END

RETURN

//_______________________________________________________________
:apply_selected_owner
//_______________________________________________________________
IF warZoneKey == ''
THEN RETURN
END

IF selectedOwner == GANG_GROVE
THEN RETURN
END

IF selectedOwner == currentGangEnemy
THEN RETURN
END

density = GET_ZONE_GANG_STRENGTH warZoneKey GANG_GROVE

IF density <= 0
THEN RETURN
END

SET_ZONE_GANG_STRENGTH warZoneKey GANG_GROVE 0
SET_ZONE_GANG_STRENGTH warZoneKey selectedOwner density

CLEAR_SPECIFIC_ZONES_TO_TRIGGER_GANG_WAR

RETURN

//_______________________________________________________________
:reset_runtime
//_______________________________________________________________
isGangWarActive = 0
currentGangEnemy = -1
selectedOwner = GANG_GROVE
selectionAborted = 0

countFamilies = 0
countTriads = 0
countAztecas = 0

warZoneKey = ''

RETURN

//=========================================================================//
:read_INI
//=========================================================================//
IF NOT READ_INT_FROM_INI_FILE "CLEO\AlliedGangTurfTransfer.ini" "Settings" "ENABLE_MOD" isEnabled
THEN isEnabled = 1
END

IF isEnabled <> 1
THEN TERMINATE_THIS_CUSTOM_SCRIPT
END

IF NOT READ_INT_FROM_INI_FILE "CLEO\AlliedGangTurfTransfer.ini" "Settings" "Transfer_Mode" transferMode
THEN transferMode = DEFAULT_TRANSFER_MODE
END

IF transferMode <> 1
THEN transferMode = DEFAULT_TRANSFER_MODE
END

IF NOT READ_INT_FROM_INI_FILE "CLEO\AlliedGangTurfTransfer.ini" "Settings" "Selection_Time" selectionTime
THEN selectionTime = DEFAULT_SELECTION_TIME
END

IF selectionTime < 0
THEN selectionTime = DEFAULT_SELECTION_TIME
END

IF selectionTime > MAX_SELECTION_TIME
THEN selectionTime = MAX_SELECTION_TIME
END

IF NOT READ_INT_FROM_INI_FILE "CLEO\AlliedGangTurfTransfer.ini" "Settings" "Prompt_Delay" promptDelay
THEN promptDelay = DEFAULT_PROMPT_DELAY
END

IF promptDelay < 0
THEN promptDelay = DEFAULT_PROMPT_DELAY
END

IF promptDelay > MAX_PROMPT_DELAY
THEN promptDelay = MAX_PROMPT_DELAY
END

IF NOT READ_INT_FROM_INI_FILE "CLEO\AlliedGangTurfTransfer.ini" "Controls" "Triad_Button" triadButton
THEN triadButton = DEFAULT_TRIAD_BUTTON
END

IF OR
    triadButton < MIN_BUTTON_ID
    triadButton > MAX_BUTTON_ID
THEN triadButton = DEFAULT_TRIAD_BUTTON
END

IF NOT READ_INT_FROM_INI_FILE "CLEO\AlliedGangTurfTransfer.ini" "Controls" "Aztecas_Button" aztecaButton
THEN aztecaButton = DEFAULT_AZTECAS_BUTTON
END

IF OR
    aztecaButton < MIN_BUTTON_ID
    aztecaButton > MAX_BUTTON_ID
THEN aztecaButton = DEFAULT_AZTECAS_BUTTON
END

RETURN